iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Odoo

Odoo16 入門介紹系列 第 23

Day23_odoo_QWeb_總結

  • 分享至 

  • xImage
  •  

最後我們來說說如何產出PDF吧~

在odoo中想要產出report主要有兩種方式,一個是透過odoo內建的action按鈕,另一個就是自己製作一個button使PDF產出,我們先從action來示範吧。

<odoo>
	<template id='libaray_report'>
		<t t-call ='web.html_container'>
			<t t-foreach='library_book' t-as='doc'>
				<t t-call='external_layout'>
					<div class='page'>
						<h1>Hellow</h1>
					</div>
				</t>
			</t>
		</t>
	</template>
	
	<record id='libaray_report_action' model='ir.action.report'>
		<field name='name'>library report action</field>
		<field name='model'>library</field>
		<field name='report_type'>qweb_pdf 或 qweb_html</field>
		<field name='report_name'>Library.library_report</field>
		<field name='report_file'>Library.library_report</field>
		<field name='print_report_name'>library_detail_report</field>
		<field name='binding_type'>report</field>
	</record>
</odoo>

這一個方法是最簡單的方式,不過記得要在__manifest__.py中加入report/hello.xml,不然odoo是不會知道有這個report。

我們來說另一個方法吧,這個方法是筆者比較常用的,因為使用者在需要產出報表最直觀也最不需要去記起來的,就是直接按一個button,所以我們來看看要如何實現吧。

首先我們要在 library > model > model.py 中製作一個Function:

def print_report(self):
    return self.env.ref("library.libaray_report_action").report_action(self)

再來是在 library > view > view.xml 中,增加一個object button:

<header>
    <button name="print_report" type="object" string="print_hello_report"?>
</header>

最後就是將我們的report設計好放在library >report > hello.xml 中,也就是第一個範例,你會發現在製作Function時,libaray_report_action就是我們前面範例中的action。

格式化QWeb

讀者如果有寫過html的經驗,接下來介紹的東西應該不陌生。在QWeb中也提供了header與footer的方式,使報表呈現更美觀也更方便換頁,你只需要在你的report中加入 <div class="header"><div class="footer"> 就可以把你的表頭表尾給排版好了。


上一篇
Day22_odoo_QWeb_T-tages(3)
下一篇
Day24_odoo_wizard
系列文
Odoo16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言